/**
 * @file lv_ui_node.h
 *
 */

#ifndef LV_UI_NODE_H
#define LV_UI_NODE_H

#ifdef __cplusplus
extern "C" {
#endif

/*********************
 *      INCLUDES
 *********************/
#include "lvgl.h"

/*********************
 *      DEFINES
 *********************/

/**********************
 *      TYPEDEFS
 **********************/


//ui node
typedef uint16_t lv_ui_entry_id_t;

typedef struct
{
    uint16_t scroll_dir : 1;
	uint16_t node_style : 3;
    uint16_t reserved : 12;

}lv_ui_node_attr_t;
typedef struct 
{
	lv_ui_entry_id_t child_0_id;
	lv_ui_entry_id_t child_1_id;
	lv_point_t child_0_top;
	lv_point_t child_1_top;
	lv_ui_node_attr_t  attr;

}lv_ui_node_t;

#define     UI_NODE_MAX_DEPTH       12
#define 	CUSTOM_ID_ARRY_NUMBER   12

typedef void (* ui_func)(lv_obj_t *obj,lv_point_t *top);

/**********************
 * GLOBAL PROTOTYPES
 **********************/

void lv_ui_node_stack_init(void);
void lv_ui_node_func(lv_obj_t *parent, lv_ui_node_t *node);
void lv_ui_node_add(lv_obj_t *node_parent,lv_obj_t * obj_scroll,ui_func cur,ui_func next,bool scroll_dir);

void lv_ui_node_alpha_fade_func(lv_obj_t *parent, lv_ui_node_t *node);
void lv_ui_node_alpha_fade_add(lv_obj_t *node_parent,lv_obj_t * obj_scroll,ui_func cur,ui_func next,bool scroll_dir);

void lv_ui_node_alpha_blend_func(lv_obj_t *parent, lv_ui_node_t *node);
void lv_ui_node_alpha_blend_add(lv_obj_t *node_parent,lv_obj_t * obj_scroll,ui_func cur,ui_func next,bool scroll_dir);

void lv_ui_node_zoom_blend_func(lv_obj_t *parent, lv_ui_node_t *node);
void lv_ui_node_zoom_blend_add(lv_obj_t *node_parent,lv_obj_t * obj_scroll,ui_func cur,ui_func next,bool scroll_dir);

bool lv_ui_node_set_cur_p(lv_point_t * top);
bool lv_ui_node_get_cur(lv_ui_node_t * e);
bool lv_ui_node_set_cur(lv_ui_node_t * e);
bool lv_ui_node_pop_ex(lv_ui_node_t * e);
void lv_ui_node_hor_prev(lv_obj_t *parent);

bool lv_alpha_fade_set(lv_obj_t * parent,lv_opa_t value);

/*=====================
 * Other functions
 *====================*/

/**********************
 *      MACROS
 **********************/




#ifdef __cplusplus
} /*extern "C"*/
#endif

#endif
